/**
 * 
 */
package mx.bd;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import android.content.ContentValues;
import android.content.Context;
import android.content.res.AssetManager;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

/**
 * @author v1ctor
 *
 */
public class BDOpenHelper extends SQLiteOpenHelper {

	private Context context;
	
	/**
	 * Creamos la base de datos. Todas la propiedades que definien a la base de 
	 * datos se encuentran en <code>BD.java</code>
	 * @param context
	 */
	public BDOpenHelper(Context context) {
		super(context, BD.BD_NAME, null, BD.BD_VERSION);
		this.context = context;
	}

	/**
	 * Crea la BD
	 */
	@Override
	public void onCreate(SQLiteDatabase db) {
		try {
			
			db.execSQL(getFile(BD.BD_FILE_CONSOLE));
			db.execSQL(getFile(BD.BD_FILE_VGAME));
			db.execSQL(getFile(BD.BD_FILE_VGAME_VCONSOLE));
			db.execSQL(getFile(BD.BD_FILE_VPORTRAIT));
			db.execSQL(getFile(BD.BD_FILE_VGAME_VPORTRAIT));
			db.execSQL(getFile(BD.BD_FILE_VIMAGE));
			db.execSQL(getFile(BD.BD_FILE_VGAME_VIMAGE));
			db.execSQL(getFile(BD.BD_FILE_VVIDEO));
			db.execSQL(getFile(BD.BD_FILE_VGAME_VVIDEO));
			db.execSQL(getFile(BD.BD_FILE_PRAGMA_KEYS));
			inserts(db);
			
		} catch (SQLException e) {
			Log.e("SQLException", e.toString());
			e.printStackTrace();
		} catch (IOException e) {
			Log.e("IOException", e.toString());
			e.printStackTrace();
		}

	}// onCreate


	
	/**
	 *  Upgrade de la BD
	 */
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		
		
		
	}// onUpgrade

	/**
	 * Downgrade the DB. (API 11) Ignored in API < 11
	 *
	 */
	@Override
	public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		
		try {
			
			// DROP TODO 
			
			onCreate(db);
			
		} catch (SQLException e) {
			Log.e("SQLException", e.toString());
			e.printStackTrace();
		}
		
	}// onDowngrade
	
	/**
	 * Obtiene el archivo de BD desde los assets del proyecto
	 * @return
	 * @throws IOException
	 */
	private String getFile(String file) throws IOException {

		try {
			// obtiene el manejador de archivos en assets
			AssetManager assetManager = context.getAssets();

			// obtiene el archivo que necesitamos. (lanza excepción)
			InputStream isr = assetManager.open(file);
			
			BufferedReader br = new BufferedReader(new InputStreamReader(isr));
			StringBuilder archivoCompleto = new StringBuilder();
			
			String linea = "";
			while ( (linea = br.readLine()) != null) {
				archivoCompleto.append(linea);				
			}// regresa el archivo en una línea.


			br.close();
			
			return archivoCompleto.toString();

		} catch (FileNotFoundException e) {
			Log.e("FileNotFoundException", e.toString());
			return null;
		}
	}// getFile

	/**
	 * Insertamos de una manera muy sucia las consolas. 
	 * (Futuro cambio)
	 * @param db
	 */
	private void inserts(SQLiteDatabase db){
		
		ContentValues values = new ContentValues();
		values.put("sConsole", "DEFAULT");
		db.insert(BD.CONSOLE, null, values);
		values.put("sConsole", "Play Station 3");
		db.insert(BD.CONSOLE, null, values);
		values.put("sConsole", "XBox 360");
		db.insert(BD.CONSOLE, null, values);
		values.put("sConsole", "Wii");
		db.insert(BD.CONSOLE, null, values);
		values.put("sConsole", "PSP");
		db.insert(BD.CONSOLE, null, values);
		values.put("sConsole", "DS");
		db.insert(BD.CONSOLE, null, values);
		values.put("sConsole", "3DS");
		db.insert(BD.CONSOLE, null, values);
		values.put("sConsole", "Play Station 2");
		db.insert(BD.CONSOLE, null, values);
		values.put("sConsole", "PS Vita");
		db.insert(BD.CONSOLE, null, values);
		values.put("sConsole", "ND");
		db.insert(BD.CONSOLE, null, values);
		values.put("sConsole", "PC");
		db.insert(BD.CONSOLE, null, values);
		values.put("sConsole", "XBox");
		db.insert(BD.CONSOLE, null, values);	
	}
	
}
